from datetime import datetime

from homeassistant.const import (
    STATE_UNAVAILABLE,
    ATTR_BATTERY_CHARGING,
    ATTR_BATTERY_LEVEL,
    STATE_ON,
    STATE_OFF,
)
from homeassistant.components.binary_sensor import DEVICE_CLASS_MOTION

from .helpers import setup_platform, BrowserModEntity

PLATFORM = "binary_sensor"


async def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
    return setup_platform(hass, config, async_add_devices, PLATFORM, BrowserModSensor)


async def async_setup_entry(hass, config_entry, async_add_entities):
    await async_setup_platform(hass, {}, async_add_entities)


class BrowserModSensor(BrowserModEntity):
    domain = PLATFORM

    def __init__(self, hass, connection, deviceID, alias=None):
        super().__init__(hass, connection, deviceID, alias)
        self.last_seen = None

    def updated(self):
        self.last_seen = datetime.now()
        self.schedule_update_ha_state()

    @property
    def state(self):
        if not self.connection.connection:
            return STATE_UNAVAILABLE
        if self.data.get("motion", False):
            return STATE_ON
        return STATE_OFF

    @property
    def is_on(self):
        return not self.data.get("motion", False)

    @property
    def device_class(self):
        return DEVICE_CLASS_MOTION

    @property
    def extra_state_attributes(self):
        return {
            "type": "browser_mod",
            "last_seen": self.last_seen,
            ATTR_BATTERY_LEVEL: self.data.get("battery", None),
            ATTR_BATTERY_CHARGING: self.data.get("charging", None),
            **self.data,
        }
